#include<iostream>

using namespace std;

typedef struct{
    long long x;
    long long y;
}Trash;

Trash trash[1000];
int n;

bool is_Exist(int x, int y){
    for(int i = 0; i < n; i ++){
        if(trash[i].x == x && trash[i].y == y){
            return true;
        }
    }
    return false;
}

int main(){
    cin >> n;
    int score[5] = {0};
    for(int i = 0; i < n; i ++){
        cin >> trash[i].x >> trash[i].y;
    }
    for(int i = 0; i < n; i ++){
        int a = 0;
        if(is_Exist(trash[i].x - 1, trash[i].y) && is_Exist(trash[i].x + 1, trash[i].y) && is_Exist(trash[i].x, trash[i].y - 1) && is_Exist(trash[i].x, trash[i].y + 1)){
            if(is_Exist(trash[i].x + 1, trash[i].y + 1)){
                a ++;
            }
            if(is_Exist(trash[i].x - 1, trash[i].y + 1)){
                a ++;
            }
            if(is_Exist(trash[i].x + 1, trash[i].y - 1)){
                a ++;
            }
            if(is_Exist(trash[i].x - 1, trash[i].y - 1)){
                a ++;
            }
            score[a] ++;
        }
    }
    for(int i = 0; i < 5; i ++){
        cout << score[i] << endl;
    }
    return 0;
}